# 定义 add_sources 函数
# 函数参数：
#   TARGET_NAME 目标名称
#   SOURCES_DIR 源文件目录
#   INCLUDE_DIR 头文件目录
#   LINK_LIBS 链接库
function(add_sources)
    # 解析参数
    set(multiValueArgs
    SOURCES_DIR # 源文件目录
    INCLUDE_DIR # 头文件目录
    LINK_LIBS # 链接库
    TARGET_NAME # 目标名称
    )
    cmake_parse_arguments(ARG "" "" "${multiValueArgs}" ${ARGN})
    # 判断目标是否存在
    if(NOT TARGET ${ARG_TARGET_NAME})
        message(FATAL_ERROR "Target ${ARG_TARGET_NAME} 未创建")
    endif()
    file(GLOB_RECURSE SRC_LIST
    ${ARG_SOURCES_DIR}/*.cpp
    ${ARG_INCLUDE_DIR}/*.h
    ${ARG_INCLUDE_DIR}/*.hpp
    )
    # 添加 utils 模块的源文件
    target_sources(${ARG_TARGET_NAME} PRIVATE ${SRC_LIST})
    # 添加头文件
    target_include_directories(${ARG_TARGET_NAME} PRIVATE ${ARG_INCLUDE_DIR})
    # 链接库
    if(ARG_LINK_LIBS)
        target_link_libraries(${ARG_TARGET_NAME} PRIVATE ${ARG_LINK_LIBS})
    endif()
endfunction()
